<html>
    <head>
        <title>Abp链接字符串选项  AbpDbConnectionOptions</title>
    </head>
    <body>
        <script>
             /*
                     二、AbpDbConnectionOptions abp连接字符串配置项

                                AbpDbConnectionOptions是用于"设置连接字符串"和 "配置数据库结构" 的选项类、


                                1、设置连接字符串
                                        ABP使用 AbpDbConnectionOptions 来获取连接字符串。
                                        如果你如上述方式配置连接字符串(appsetting.json), AbpDbConnectionOptions 会自动填充。
                                        但是，你可以使用"选项模式" 来设置或覆盖链接字符串。

                                        你可以在模块的 ConfigureServices 方法中配置 AbpDbConnectionOptions.

                                            public override void ConfigureServices(ServiceConfigurationContext context)
                                            {
                                                Configure<AbpDbConnectionOptions>(options =>
                                                {
                                                    options.ConnectionStrings.Default = "...";  // 覆盖默认连接字符串

                                                    options.ConnectionStrings["AbpPermissionManagement"] = "..."; // 覆盖“权限管理模块”的连接字符串
                                                });
                                            }
                                2、配置数据库结构
                                        AbpDbConnectionOptions类的 Databases 属性用于将多个链接字符串（多个模块），分组为单个链接字符串。

                                        例如，以下链接字符串配置：

                                            "ConnectionStrings": {
                                                "Default": "Server=localhost;Database=MyMainDb;Trusted_Connection=True;",
                                                "AbpIdentity": "Server=localhost;Database=MySecondaryDb;Trusted_Connection=True;",
                                                "AbpIdentityServer": "Server=localhost;Database=MySecondaryDb;Trusted_Connection=True;",
                                                "AbpPermissionManagement": "Server=localhost;Database=MySecondaryDb;Trusted_Connection=True;"
                                            }
                                             
                                        在此示例中，我们定义了四个连接字符串，但其中最后三个是相同的；
                                        AbpIdentity、AbpIdentityServer和AbpPermissionManagement使用相同的数据库，名为MySecondaryDb。
                                        主应用程序和其他模块使用Default连接字符串，因此是MyMainDb数据库。

                                        这里我们要做的是将三个模块（AbpIdentity、AbpIdentityServer和AbpPermissionManagement）分组在一个数据库中，
                                        但是我们需要手动指定每个模块。因为后备连接字符串是Default，如果我们不为模块指定它。

                                        为了消除重复的连接字符串定义，我们可以配置AbpDbConnectionOptions.Databases属性来对这些连接字符串进行分组：
                                            
                                                    // (在启动模块中)
                                                    Configure<AbpDbConnectionOptions>(options =>
                                                    {
                                                        // 配置模块连接字符串映射
                                                        options.Databases.Configure("MySecondaryDb", db =>
                                                        {
                                                            db.MappedConnections.Add("AbpIdentity"); // 映射AbpIdentity模块的连接字符串
                                                            db.MappedConnections.Add("AbpIdentityServer"); // 映射AbpIdentityServer模块的连接字符串
                                                            db.MappedConnections.Add("AbpPermissionManagement"); // 映射AbpPermissionManagement模块的连接字符串
                                                        });
                                                    });

                                        然后我们可以更改appsettings.json文件，如以下代码块所示:

                                                    "ConnectionStrings": {
                                                        "Default": "Server=localhost;Database=MyMainDb;Trusted_Connection=True;",
                                                        "MySecondaryDb": "Server=localhost;Database=MySecondaryDb;Trusted_Connection=True;"
                                                    }

                                                MySecondaryDb成为映射连接的新连接字符串。
                                        
                                        ABP首先查找特定于模块的连接字符串，然后查看数据库映射是否可用，最后回退到Default连接字符串。
                  */

        </script>
    </body>
</html>